java8的流(Stream API)已经提供了很强大的api接口了,满足日常开发的绝大部分需要,但是还是有些欠缺比如 java9才增加的两个api takeWhile dropWhile
takeWhile() 方法使用一个断言作为参数,返回给定 Stream 的子集直到断言语句第一次返回 false。
dropWhile()与takeWhile相反,使用一个断言作为参数,直到断言语句第一次返回 true 才返回给定 Stream 的子集。
还有不爽的地方是同一个流只能执行一次流水线操作,完成后这个流就废了。要执行第二个次流水线操作就必须重新创建流。原因可以看这个java8 Stream流水线实现分析
通过Spliterator的延迟绑定能力实现对java8 流的扩展
takeWhile
1 | public static <T> Stream<T> takeWhile(Stream<T> stream, Predicate<? super T> predicate) { |
1 | public static void main(String[] args) { |
dropWhile
1 | public static <T> Stream<T> dropWhile(Stream<T> stream, Predicate<? super T> predicate) { |
1 | public static void main(String[] args) { |
在同一个流中执行多个操作
思路大概是这样的
StreamForker 记录对流的操作,通过ForkerConsumer将原来流中的元素分发生成多个子流(有几个操作,就有几个子流),在子流中调用用户的操作function
具体实现如下
1 | public class StreamForker<T> { |